home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / et / src / range.c < prev    next >
Text File  |  1993-07-08  |  9KB  |  330 lines

  1. #include  "et.h"
  2. void  init_range(int mm)/*et*/
  3. {
  4.   int   *range_p, *range_b_p;
  5.   void  (**func_p)(), (**func_b_p)();
  6.   
  7.   switch(mm) {
  8.   case 0:
  9.     range_p = P_i[i_WIN_RANGE];
  10.     range_b_p = P_i[i_WIN_RANGE_B];
  11.     func_p = &G_pn.range;
  12.     func_b_p = &G_pn.range_b;
  13.     break;
  14.   case _LT:
  15.     range_p = P_i[i_WIN_RANGE_LT];
  16.     range_b_p = P_i[i_WIN_RANGE_LT_B];
  17.     func_p = &G_pn.range_lt;
  18.     func_b_p = &G_pn.range_lt_b;
  19.     break;
  20.   case _RT:
  21.     range_p = P_i[i_WIN_RANGE_RT];
  22.     range_b_p = P_i[i_WIN_RANGE_RT_B];
  23.     func_p = &G_pn.range_rt;
  24.     func_b_p = &G_pn.range_rt_b;
  25.     break;
  26.   }
  27.   if (*func_p) {
  28.     (*func_p)(P_RES, range_p, mm);
  29.     *func_b_p = *func_p;
  30.     _copy_buf(range_b_p, range_p, sizeof(int[4]));
  31.   }
  32.   range_p[0] = range_p[1] = 10000;
  33.   range_p[2] = range_p[3] = -10000;
  34. }
  35. void  set_range(int pq_a[], int mm)/*et*/
  36. {
  37.   int   p_low, p_upp, q_low, q_upp;
  38.   int   *range_p;
  39.   
  40.   switch(mm) {
  41.   case 0:
  42.     range_p = P_i[i_WIN_RANGE];
  43.     break;
  44.   case _LT:
  45.     range_p = P_i[i_WIN_RANGE_LT];
  46.     break;
  47.   case _RT:
  48.     range_p = P_i[i_WIN_RANGE_RT];
  49.     break;
  50.   }
  51.   if (pq_a[0] < pq_a[2]) {
  52.     p_low = pq_a[0];
  53.     p_upp = pq_a[2];
  54.   } else {
  55.     p_low = pq_a[2];
  56.     p_upp = pq_a[0];
  57.   }
  58.   if (pq_a[1] < pq_a[3]) {
  59.     q_low = pq_a[1];
  60.     q_upp = pq_a[3];
  61.   } else {
  62.     q_low = pq_a[3];
  63.     q_upp = pq_a[1];
  64.   }
  65.   if (range_p[0] > p_low)
  66.     range_p[0] = p_low;
  67.   if (range_p[2] < p_upp)
  68.     range_p[2] = p_upp;
  69.   if (range_p[1] > q_low)
  70.     range_p[1] = q_low;
  71.   if (range_p[3] < q_upp)
  72.     range_p[3] = q_upp;
  73. }
  74. void  cul_range(int mm)/*et*/
  75. {
  76.   unsigned  f_1, f_2;
  77.   int   *range_p, *frame_p;
  78.   void  (**func_p)();
  79.   
  80.   switch(mm) {
  81.   case 0:
  82.     range_p = P_i[i_WIN_RANGE];
  83.     func_p = &G_pn.range;
  84.     frame_p = P_i[i_WIN_VIEW];
  85.     break;
  86.   case _LT:
  87.     range_p = P_i[i_WIN_RANGE_LT];
  88.     func_p = &G_pn.range_lt;
  89.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_LT];
  90.     break;
  91.   case _RT:
  92.     range_p = P_i[i_WIN_RANGE_RT];
  93.     func_p = &G_pn.range_rt;
  94.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_RT];
  95.     break;
  96.   }
  97.   do {
  98.     if (range_p[0] == 10000)
  99.       if (range_p[1] == 10000)
  100.         if (range_p[2] == -10000)
  101.           if (range_p[3] == -10000) {
  102.             *func_p = draw_all_range;
  103.             continue;
  104.           }
  105.     f_1 = f_2 = 0;
  106.     if (range_p[0] < frame_p[0])
  107.       set_bit(f_1, 1);
  108.     else if (range_p[0] > frame_p[2])
  109.       set_bit(f_1, 2);
  110.     if (range_p[2] < frame_p[0])
  111.       set_bit(f_2, 1);
  112.     else if (range_p[2] > frame_p[2])
  113.       set_bit(f_2, 2);
  114.     if (range_p[1] < frame_p[1])
  115.       set_bit(f_1, 4);
  116.     else if (range_p[1] > frame_p[3])
  117.       set_bit(f_1, 8);
  118.     if (range_p[3] < frame_p[1])
  119.       set_bit(f_2, 4);
  120.     else if (range_p[3] > frame_p[3])
  121.       set_bit(f_2, 8);
  122.     if (range_p[0] < frame_p[0])
  123.       range_p[0] = frame_p[0];
  124.     if (range_p[2] > frame_p[2])
  125.       range_p[2] = frame_p[2];
  126.     if (range_p[1] < frame_p[1])
  127.       range_p[1] = frame_p[1];
  128.     if (range_p[3] > frame_p[3])
  129.       range_p[3] = frame_p[3];
  130.     switch(f_1 & f_2) {
  131.     case 1:
  132.       *func_p = draw_p_low_range;
  133.       break;
  134.     case 2:
  135.       *func_p = draw_p_upp_range;
  136.       break;
  137.     case 4:
  138.       *func_p = draw_q_low_range;
  139.       break;
  140.     case 8:
  141.       *func_p = draw_q_upp_range;
  142.       break;
  143.     case 5:
  144.       range_p[0] = frame_p[0]-5;
  145.       range_p[1] = frame_p[1]-5;
  146.       range_p[2] = frame_p[0]-2;
  147.       range_p[3] = frame_p[1]-2;
  148.       *func_p = draw_out;
  149.       break;
  150.     case 9:
  151.       range_p[0] = frame_p[0]-5;
  152.       range_p[1] = frame_p[3]+1;
  153.       range_p[2] = frame_p[0]-2;
  154.       range_p[3] = frame_p[3]+4;
  155.       *func_p = draw_out;
  156.       break;
  157.     case 10:
  158.       range_p[0] = frame_p[2]+1;
  159.       range_p[1] = frame_p[3]+1;
  160.       range_p[2] = frame_p[2]+4;
  161.       range_p[3] = frame_p[3]+4;
  162.       *func_p = draw_out;
  163.       break;
  164.     case 6:
  165.       range_p[0] = frame_p[2]+1;
  166.       range_p[1] = frame_p[1]-5;
  167.       range_p[2] = frame_p[2]+4;
  168.       range_p[3] = frame_p[1]-2;
  169.       *func_p = draw_out;
  170.       break;
  171.     default:
  172.       *func_p = draw_pq_range;
  173.       break;
  174.     }
  175.   } while (0);
  176.   if (test_bit(G_f, f_GPH))
  177.     G_nb.col = H_MZN;
  178.   else if (test_bit(G_f, f_EE))
  179.     G_nb.col = set_key_col();
  180.   else if (test_bit(G_f, f_TT))
  181.     G_nb.col = H_SYN;
  182.   else
  183.     G_nb.col = H_RED;
  184.   (*func_p)(P_SET, range_p, mm);
  185. }
  186. void  cls_frame(int pq_a[], int i, int col, int line_m)/*et*/
  187. {
  188.   draw_line(pq_a[0]+i-1, pq_a[1]+i-1, pq_a[2]-i, pq_a[1]+i-1, col, line_m);
  189.   draw_line(pq_a[0]+i-1, pq_a[1]+i-1, pq_a[0]+i-1, pq_a[3]-i, col, line_m);
  190.   draw_line(pq_a[2]-i, pq_a[1]+i-1, pq_a[2]-i, pq_a[3]-i, col, line_m);
  191.   draw_line(pq_a[2]-i, pq_a[3]-i, pq_a[0]+i-1, pq_a[3]-i, col, line_m);
  192. }
  193. void  draw_all_range(int line_m, int pq_a[], int mm)/*et*/
  194. {
  195.   int   i, col;
  196.   
  197.   col = (line_m == P_SET) ? G_nb.col : H_WHT;
  198.   for (i = -4; i <= -1; i++) {
  199.     cls_frame(P_i[i_WIN_VIEW], i, H_WHT, P_RES);
  200.     if (i >= -3 && i <= -2)
  201.       cls_frame(P_i[i_WIN_VIEW], i, col, line_m);
  202.   }
  203. }
  204. void  draw_p_low_range(int line_m, int pq_a[], int mm)/*et*/
  205. {
  206.   int   i, col;
  207.   int   *frame_p;
  208.   
  209.   if (pq_a[1]>500||pq_a[3]<0)
  210.     return;
  211.   switch(mm) {
  212.   case 0:
  213.     frame_p = P_i[i_WIN_VIEW];
  214.     break;
  215.   case _LT:
  216.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_LT];
  217.     break;
  218.   case _RT:
  219.     return;
  220.   }
  221.   col = (line_m == P_SET) ? G_nb.col : H_WHT;
  222.   for (i = -3; i <= -2; i++)
  223.     draw_line(frame_p[0]+i-1,pq_a[1],frame_p[0]+i-1,pq_a[3],col,line_m);
  224. }
  225. void  draw_p_upp_range(int line_m, int pq_a[], int mm)/*et*/
  226. {
  227.   int   i, col;
  228.   int   *frame_p;
  229.   
  230.   if (pq_a[1]>500||pq_a[3]<0)
  231.     return;
  232.   switch(mm) {
  233.   case 0:
  234.     frame_p = P_i[i_WIN_VIEW];
  235.     break;
  236.   case _LT:
  237.     return;
  238.   case _RT:
  239.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_RT];
  240.     break;
  241.   }
  242.   col = (line_m == P_SET) ? G_nb.col : H_WHT;
  243.   for (i = -3; i <= -2; i++)
  244.     draw_line(frame_p[2]-i,pq_a[1],frame_p[2]-i,pq_a[3],col,line_m);
  245. }
  246. void  draw_q_low_range(int line_m, int pq_a[], int mm)/*et*/
  247. {
  248.   int   i, col;
  249.   int   *frame_p;
  250.   
  251.   if (pq_a[0]>500||pq_a[2]<0)
  252.     return;
  253.   switch(mm) {
  254.   case 0:
  255.     frame_p = P_i[i_WIN_VIEW];
  256.     break;
  257.   case _LT:
  258.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_LT];
  259.     break;
  260.   case _RT:
  261.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_RT];
  262.     break;
  263.   }
  264.   col = (line_m == P_SET) ? G_nb.col : H_WHT;
  265.   for (i = -3; i <= -2; i++)
  266.     draw_line(pq_a[0],frame_p[1]+i-1,pq_a[2],frame_p[1]+i-1,col,line_m);
  267. }
  268. void  draw_q_upp_range(int line_m, int pq_a[], int mm)/*et*/
  269. {
  270.   int   i, col;
  271.   int   *frame_p;
  272.   
  273.   if (pq_a[0]>500||pq_a[2]<0)
  274.     return;
  275.   switch(mm) {
  276.   case 0:
  277.     frame_p = P_i[i_WIN_VIEW];
  278.     break;
  279.   case _LT:
  280.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_LT];
  281.     break;
  282.   case _RT:
  283.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_RT];
  284.     break;
  285.   }
  286.   col = (line_m == P_SET) ? G_nb.col : H_WHT;
  287.   for (i = -3; i <= -2; i++)
  288.     draw_line(pq_a[0],frame_p[3]-i,pq_a[2],frame_p[3]-i,col,line_m);
  289. }
  290. void  draw_out(int line_m, int pq_a[], int mm)/*et*/
  291. {
  292.   int   col;
  293.   
  294.   if (pq_a[0]>500||pq_a[1]>500||pq_a[2]<0||pq_a[3]<0)
  295.     return;
  296.   col = (line_m == P_SET) ? G_nb.col : H_WHT;
  297.   draw_line(pq_a[0], pq_a[1], pq_a[2], pq_a[1], col, line_m);
  298.   draw_line(pq_a[2], pq_a[1], pq_a[2], pq_a[3], col, line_m);
  299.   draw_line(pq_a[2], pq_a[3], pq_a[0], pq_a[3], col, line_m);
  300.   draw_line(pq_a[0], pq_a[3], pq_a[0], pq_a[1], col, line_m);
  301. }
  302. void  draw_pq_range(int line_m, int pq_a[], int mm)/*et*/
  303. {
  304.   int   i, col;
  305.   int   *frame_p;
  306.   
  307.   if (pq_a[0]>500||pq_a[1]>500||pq_a[2]<0||pq_a[3]<0)
  308.     return;
  309.   switch(mm) {
  310.   case 0:
  311.     frame_p = P_i[i_WIN_VIEW];
  312.     break;
  313.   case _LT:
  314.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_LT];
  315.     break;
  316.   case _RT:
  317.     frame_p = (test_bit(G_f, f_GPH)) ? P_i[i_WIN_VIEW] : P_i[i_WIN_VIEW_RT];
  318.     break;
  319.   }
  320.   col = (line_m == P_SET) ? G_nb.col : H_WHT;
  321.   for (i = -3; i <= -2; i++) {
  322.     draw_line(pq_a[0],frame_p[1]+i-1,pq_a[2],frame_p[1]+i-1,col,line_m);
  323.     draw_line(pq_a[0],frame_p[3]-i,pq_a[2],frame_p[3]-i,col,line_m);
  324.     if (mm != _RT)
  325.       draw_line(frame_p[0]+i-1,pq_a[1],frame_p[0]+i-1,pq_a[3],col,line_m);
  326.     if (mm != _LT)
  327.       draw_line(frame_p[2]-i,pq_a[1],frame_p[2]-i,pq_a[3],col,line_m);
  328.   }
  329. }
  330.